var App = {
	createdata  : {
	    create  : function(to, id){ $(to).append("<div id='"+id+"'></div>"); },
	    message : function(to, classe, msg, response)
	    {
	    	$(to).append("<div class='"+classe+"' style='display:none;'>" +
		  			"<div>"+
		  			  "<div style='float:left'><h3>"+msg+"</h3></div>"+
		  			  "<div style='float:right; text-align: right;'>"+
		  			    "<div class='close'>"+
		  			      "<a href='javascript:void(0);' class='icoFechar' id='closeTopMessage'></a>"+
		  			    "</div>" +
		  			  "</div>" +
		  			"</div>"+
		  			"<div style='clear:both'>"+response+"</div>"+
	  		    "</div>");
	    }
	},
	messagedata : {
        clear: function ()
        {
        	$("div[class^='msg']").each(function(){ $(this).remove(); });
        },
        alert:  function(type, response, label)
        {
        	App.messagedata.clear();
        	App.createdata.message("#mensagens", type, label, response);
        	
        	$('div.' + type).show();
        }
    },
	formatdata	: {
        even	:  function(seletor , cor){ $(seletor + ":even").css("background-color", cor); },
        calendar: function(params){ $('.datepicker').datepicker(params); },
        mask    : function(field, mask)
        {
            var array_to_mask   = new Array("cep", "date", "time", "cpf", "fone");
            var array_mask      = new Array("99999-999", "99/99/9999", "99:99", "999.999.999-99", "(99) 9999-9999");
            
            for(i in array_to_mask)
                if(mask == array_to_mask[i])
                    $(field).mask(array_mask[i]);
        },
        upper    :  function()
        {
        	$(document).find(':input').each(function() {
        		$(this).bind('keyup', function(){
        			$(this).val($(this).val().toUpperCase());
        		});
        	})
        }
	},
	formdata	: {
		save	: function (is_ajax, callback, dataType)
        {
            var validator = $("form[name^='form_']").each(function()
            {
                $(this).validate({
                    errorClass: 'mensagem_erro',
                    validClass: 'valid',
                    submitHandler: function(form)
                    {
                		var options = {
                            url: $(form).attr("action"),
                            type: 'post',
                            dataType: 'json',
                            success: function(response)
                            {
                            	try
                                {
                            		if(callback)
                                	{
                            			if(response.error)
	                                  	{
                            				App.messagedata.alert('msgErro', response.error, 'Error');
	                                  		return;
	                                  	}
                                		eval(callback);
                                		App.messagedata.alert('msgSucesso', 'Dados salvos com sucesso.', 'Sucesso');
                                	}
                            		else
			                      	{
                            			if(response.error)
			                      		{
                            				App.messagedata.alert('msgErro', response.error, 'Error');
			                      			return;
			                      		}	
			                      		else
			                      		{
			                      			App.messagedata.alert('msgSucesso', 'Dados salvos com sucesso.', 'Sucesso');
			                      		}
			                      	}
                                }
                                catch(err)
                                {
                                	App.messagedata.alert('msgErro', 'Erro ao executar operação.', 'Erro');
                                }
                            }
                        };

                        if(is_ajax)
                        {
                        	$(form).ajaxSubmit(options);
                        	return false;
                        }
                        else
                        	$(form).submit();

                        return false;
                   }
                });
            });
        },
        clear: function() {
        	$("form[name^='form_']").each(function() {
        		$(this).find(':input').each(function() {
	                switch(this.type) {
	                    case 'password':
	                    case 'select-multiple':
	                    case 'select-one':
	                    case 'text':
	                    case 'textarea':
	                        $(this).val('');
	                        break;
	                    case 'checkbox':
	                    case 'radio':
	                        this.checked = false;
	                }
        		});
            });
        }
	},
	loaddata    : {
		page: function(action, to, params, responseType, callback)
        {
            $.post(action, params , function(response)
            {
        		if(response.error){
        			App.messagedata.alert('msgErro', response.error, 'Error');
        			return false;
        		}
        		else if(response.success)
        			App.messagedata.alert('msgSucesso', 'Operação realizada com sucesso.', 'Sucesso');
        		else{
        			$(to).html(response);
        		}
        		
        		if(callback)
            		eval(callback);
            	
                return false;
            });
        },
        text: function(to, text){$(to).html(text);},
        html: function(to, html){$(to).html(html); $(to).focus();},
        click: function(seletor, to, params, responseType, callback, focus)
        {
            $(seletor).click(function(){
            	if(to) to = to; else to = $(this).attr('rel');
            	
                App.loaddata.page($(this).attr("href"), to,  params, responseType, callback);
                //to = null;
                return false;
            });
        }
	},
	modaldata 	: {
        onClick : function(id, inner, type, params, focus)
        {
            $("a[id='"+id+"']").click(function()
            {
            	$("#dialog").dialog("destroy");
                $("#dialog").html('');
                $("#dialog").load($(this).attr("href"));
                
                if(focus)
                	$(this).parent().parent().css('background', '#F5DC5E');
                
                if(type)
                {
                    if(type == "dialog")
                    {
                    	App.modaldata.openDialog("#dialog", params);
                    	return false;
                    }
                    else if(type == "modal") {$.modal($("#"+inner));return false;}
                    else if(type == "lightbox"){alert('lighbox');return false;}
                }
            });
        },
        openDialog: function(id, params)
        {
            if($(id).dialog( 'isOpen' ) == false)
                $(id).dialog('open');
            else 
            {
            	$("#dialog").dialog( "destroy" );
            	$(id).dialog(params);
            }
        },
        closeDialog: function()
        {
        	$("#dialog").dialog("close");
        }
    },
	ajaxdata	: {
        control :  function()
        {
    		$('body').append('<div id="loading">Aguarde carregando...</div>');
    		$('body').ajaxStart(function(){ $("#loading").show(); });
    		$('body').ajaxStop(function(){ $("#loading").hide(); });
        }
	}
};

/**
 * Inicialização dos componentes
 */
$(document).ready(function(){
	App.ajaxdata.control();
	App.formatdata.upper();
	App.formatdata.calendar();
	
	// fechar a janela de mensagem
	$('#closeTopMessage').click(function(){ $('#mensagens').hide(); });
});